﻿/**********************************************************
 ●项目：Smartkernel
 ●公司：智能核心信息技术研发中心
 ●作者：曹艳白
 ●邮箱：caoyanbai@gmail.com
 ●创建：2008-08-10
 ●版本：1.0
**********************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Smartkernel.Interfaces
{
    /// <summary>
    /// 缓存接口
    /// </summary>
    public interface ISmartCacher
    {
        /// <summary>
        /// 加入缓存项
        /// </summary>
        /// <param name="category">缓存所属分类</param>
        /// <param name="key">键</param>
        /// <param name="value">缓存项</param>
        /// <param name="cacheTime">对象的缓存时间，小于等于0表示永久，其他值表示缓存的秒数</param>
        /// <param name="refreshCreateTime">是否更新创建时间，如果为true则更新，每次对象被访问都会刷新创建时间为当前时间，会影响到超时清理条件</param>
        /// <param name="minCounter">在指定缓存时间内，调用次数小于这个值的将被清理，小于等于0代表此条件不起作用</param>
        void Add(string category, string key, object value, int cacheTime, bool refreshCreateTime, int minCounter);

        /// <summary>
        /// 加入默认分类缓存项
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">缓存项</param>
        /// <param name="cacheTime">对象的缓存时间，小于等于0表示永久，其他值表示缓存的秒数</param>
        /// <param name="refreshCreateTime">是否更新创建时间，如果为true则更新，每次对象被访问都会刷新创建时间为当前时间，会影响到超时清理条件</param>
        /// <param name="minCounter">在指定缓存时间内，调用次数小于这个值的将被清理，小于等于0代表此条件不起作用</param>
        void Add(string key, object value, int cacheTime, bool refreshCreateTime, int minCounter);

        /// <summary>
        /// 插入超时缓存项
        /// </summary>
        /// <param name="category">缓存所属分类</param>
        /// <param name="key">键</param>
        /// <param name="value">缓存项</param>
        /// <param name="cacheTime">对象的缓存时间，小于等于0表示永久，其他值表示缓存的秒数</param>
        /// <param name="refreshCreateTime">是否更新创建时间，如果为true则更新，每次对象被访问都会刷新创建时间为当前时间，会影响到超时清理条件</param>
        void Add(string category, string key, object value, int cacheTime, bool refreshCreateTime);

        /// <summary>
        /// 插入默认分类超时缓存项
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">缓存项</param>
        /// <param name="cacheTime">对象的缓存时间，小于等于0表示永久，其他值表示缓存的秒数</param>
        /// <param name="refreshCreateTime">是否更新创建时间，如果为true则更新，每次对象被访问都会刷新创建时间为当前时间，会影响到超时清理条件</param>
        void Add(string key, object value, int cacheTime, bool refreshCreateTime);

        /// <summary>
        /// 加入永久缓存项
        /// </summary>
        /// <param name="category">缓存所属分类</param>
        /// <param name="key">键</param>
        /// <param name="value">缓存项</param>
        void Add(string category, string key, object value);

        /// <summary>
        /// 加入默认分类永久缓存项
        /// </summary>
        /// <param name="key">键</param>
        /// <param name="value">缓存项</param>
        void Add(string key, object value);

        /// <summary>
        /// 获取缓存项
        /// </summary>
        /// <param name="category">缓存所属分类</param>
        /// <param name="key">键</param>
        /// <returns>缓存项</returns>
        object GetValue(string category, string key);

        /// <summary>
        /// 获取默认分类缓存项
        /// </summary>
        /// <param name="key">键</param>
        /// <returns>缓存项</returns>
        object GetValue(string key);

        /// <summary>
        /// 判断缓存项是否存在
        /// </summary>
        /// <param name="category">缓存所属分类</param>
        /// <param name="key">键</param>
        /// <returns>判断的结果，true表示存在，false表示不存在</returns>
        bool ContainsKey(string category, string key);

        /// <summary>
        /// 判断默认分类缓存项是否存在
        /// </summary>
        /// <param name="key">键</param>
        /// <returns>判断的结果，true表示存在，false表示不存在</returns>
        bool ContainsKey(string key);

        /// <summary>
        /// 删除缓存项
        /// </summary>
        /// <param name="category">缓存所属分类</param>
        /// <param name="key">键</param>
        void Remove(string category, string key);

        /// <summary>
        /// 删除默认分类缓存项
        /// </summary>
        /// <param name="key">键</param>
        void Remove(string key);

        /// <summary>
        /// 清空指定分类的全部缓存项
        /// </summary>
        /// <param name="category">缓存所属分类</param>
        void Clear(string category);

        /// <summary>
        /// 清空默认分类的全部缓存项
        /// </summary>
        void Clear();

        /// <summary>
        /// 清空全部分类缓存项
        /// </summary>
        void ClearAll();

        /// <summary>
        /// 手工执行清理的功能，清理全部缓存项
        /// </summary>
        void CleanAll();

        /// <summary>
        /// 手工执行清理的功能，清理默认分类的全部缓存项
        /// </summary>
        void Clean();

        /// <summary>
        /// 手工执行清理的功能，清理指定分类的全部缓存项
        /// </summary>
        /// <param name="category">缓存所属分类</param>
        void Clean(string category);
    }
}
